package com.example.project.projectspringcloud.entity.user;

import com.example.project.projectspringcloud.entity.BaseEntity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.util.List;

@Data
@EqualsAndHashCode(callSuper = false)
@JsonIgnoreProperties(value = "handler")
public class User extends BaseEntity {

    /**
     * account
     */
    @Size(min = 5, max = 36, message = "USER_ACCOUNT_INVALID")
    private String account;

    /**
     * password
     */
    private String pwd;

    /**
     * 名字
     */
    private String name;

    /**
     * 昵称
     */
    private String nickname;

    /**
     * 描述
     */
    private String description;

    /**
     * 用户类型 4. 摄影师, 5. 编剧
     */
    private Integer type;

    /**
     * 性别
     */
    private Integer gender;

    /**
     * mobile
     */
    @Pattern(regexp = "^\\s*$|^[+]{0,1}(\\d){1,3}[ ]?([-]?((\\d)|[ ]){1,12})+$", message = "USER_MOBILE_INVALID")
    private String mobile;

    /**
     * email
     */
    @Pattern(regexp = "^\\s*$|^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9]{2,6}$", message = "USER_EMAIL_INVALID")
    private String email;

    /**
     * WeChat
     */
    private String wechat;

    /**
     * qq
     */
    private String qq;

    /**
     * 头像
     */
    private String portrait;

    /**
     * 照片
     */
    private String photo;

    /**
     * 移动端显示照片
     */
    private String mobilePhoto;

    /**
     * 账号状态
     */
    private Integer status;

    /**
     * 期望
     */
    private Integer expect;

    /**
     * 要求附件
     */
    private String requirement;

    /**
     * 要求文字
     */
    private String requirementText;

    /**
     * 地址, 对应地区表
     */
    private Integer address;

    /**
     * 毕业院校
     */
    private String graduateInstitution;

    /**
     * 主要成就
     */
    private String mainAchievements;

    /**
     * 一句话
     */
    private String personalizedSignature;

    /**
     * 背景
     */
    private String background;

    /**
     * 列表显示排序
     */
    private Integer order;

    /**
     * 点赞数量
     */
    private Integer likeCount;

    /**
     * 收藏数量
     */
    private Integer collectCount;

    /**
     * 注册来源
     */
    private Integer registType;

    private String filtrate;

    /**
     * 业务查询字段 ////
     */
    /**
     * 显示位置
     */
    @JsonIgnore
    private Integer[] filtrates;

    /**
     * 根据该用户ID查询该用户是否收藏this用户
     */
    private Integer collectUser;

    /**
     * 角色
     */
    @JsonIgnore
    @NotNull(message = "USER_ROLE_CAN_NOT_BE_NULL", groups = AdminGroup.class)
    private List<Role> roles;

    /**
     * 该用户最大权限
     */
    @JsonIgnore
    private Integer maxLevel;

    /**
     * 业务显示字段 ////
     */
    /**
     * collectUser是否收藏 this用户
     */
    private Integer collectUserCollect;

    /**
     * collectUser是否喜欢 this用户
     */
    private Integer collectUserLike;

    public User() {

    }

    public User(Integer id) {
        setId(id);
    }

    public interface UserGroup {
    }

    public interface AdminGroup {
    }
}